package com.sprouting.personal.service;

import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sprouting.personal.dao.ConfigDao;
import com.sprouting.personal.interfaces.common.Constant;
import com.sprouting.personal.model.entity.Config;
import com.sprouting.personal.utils.EntityTool;
import com.sprouting.personal.utils.IdTool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * 配置信息
 *
 * @author ：LX（长沙麓谷）
 * @date 创建时间： 2022/8/24 0:35
 */
@Service
@Slf4j
public class ConfigService extends ServiceImpl<ConfigDao, Config> {

    @Resource
    private ConfigDao configDao;

    /**
     * 根据key来获取配置信息
     * @param code 键
     * @param userId 用户ID，注意，不会查询默认的值
     * @return
     */
    public Config getConfigByCode(String code, String userId) {
        return configDao.getConfigByCode(code, userId);
    }

    /**
     * 根据用户ID查询对应的配置信息
     * @param userId 用户ID
     * @return
     */
    public List<Config> getConfigByUserId(String userId) {
        return configDao.getConfigByUserId(userId);
    }

    /**
     * 根据代码查询用户对应的配置信息，注意，该方法会自动将数据复制到个人配置中
     * @param code 代码 {@link Constant.ConfigCode}
     * @param userId 用户ID
     * @return
     */
    public Config getConfigByCodeAutomaticCompletion(String code, String userId){
        // 先查询自身的
        Config config = configDao.getConfigByCode(code, userId);
        if (config == null){
            // 如果没有，则说明在公共的里面
            config = configDao.getConfigByCode(code, Constant.DefaultValue.STRING);
            if (config == null){
                return null;
            }

            // 将数据复制到自己的里面
            config.setId(IdTool.getId());
            config.setUserId(userId);
            EntityTool.buildSaveBase(config, userId);
            configDao.insert(config);
        }

        return config;
    }

    /**
     * 获取带日期的路径
     * @return /2020/01/22/
     */
    public String getDataPath(){
        Date date = new Date();
        int year = DateUtil.year(date);
        int month = DateUtil.month(date) + 1;
        int day = DateUtil.dayOfMonth(date);
        return Constant.Base.DISK_SYMBOL + year + Constant.Base.DISK_SYMBOL + month + Constant.Base.DISK_SYMBOL + day + Constant.Base.DISK_SYMBOL;
    }

    /**
     * 判断表是否存在
     * @param tableName 表名
     * @return 返回非0则存在
     */
    public Integer getWhetherTableExists(String tableName){
        return configDao.getWhetherTableExists(tableName);
    }

}
